package model

import "time"

type LockedSite struct {
	MapName string `json:"map_name" bson:"map_name"`
	SiteId  string `json:"site_id" bson:"site_id" binding:"required"`
}

func (LockedSite) TableName() string {
	return "t_data_locked_stations"
}

type LockedArea struct {
	MapName       string   `json:"map_name" bson:"map_name"`
	AreaId        string   `json:"area_id" bson:"area_id" binding:"required"`
	ContainDotIds []string `json:"contain_dot_ids" bson:"contain_dot_ids"`
	MainTaskCode  string   `json:"main_task_code" bson:"main_task_code"`
}

func (LockedArea) TableName() string {
	return "t_data_locked_Areas"
}

type StandbySite struct {
	MapName        string   `json:"map_name" bson:"map_name"`                 //待命点所属地图名
	SiteId         string   `json:"site_id" bson:"site_id"`                   //待命点所属地站点
	AgvID          string   `json:"agv_id" bson:"agv_id"`                     //占用待命点的agv
	BanAgvList     []string `json:"ban_agv_list" bson:"ban_agv_list"`         //待命点禁止的AGV列表，为空时允许全部AGV
	AllowGroupList []string `json:"allow_group_list" bson:"allow_group_list"` //允许的分组列表
	Priority       int      `json:"priority" bson:"priority"`                 //优先级，数字越大等级越高
}

func (StandbySite) TableName() string {
	return "t_data_standby_sites"
}

//判断待命点是否在站点锁定中
func (standbySite StandbySite) In(lockedSites []LockedSite) bool {
	if lockedSites == nil || len(lockedSites) < 1 {
		return false
	}
	for _, lockedSite := range lockedSites {
		if lockedSite.MapName == standbySite.MapName && lockedSite.SiteId == standbySite.SiteId {
			return true
		}
	}
	return false
}

type ChargeSite struct {
	Id         uint8      `json:"charge_id" bson:"id"`              //充电桩编号
	MapName    string     `json:"map_name" bson:"map_name"`         //充电桩所属地图名
	SiteId     string     `json:"site_id" bson:"site_id"`           //充电桩所属站点
	Ip         string     `json:"charge_ip" bson:"ip"`              //充电桩ip
	Port       int        `json:"charge_port" bson:"port"`          //充电桩port
	AgvID      string     `json:"agv_id" bson:"agv_id"`             //占用的agv
	Rule       ChargeRule `json:"rule" bson:"rule"`                 //充电规则详解
	BanAgvList []string   `json:"ban_agv_list" bson:"ban_agv_list"` //充电桩禁止的AGV列表，为空时允许全部AGV
	//Uuid    string `json:"-" bson:"uuid"`            //充电统计同的识别码
}
type ChargeRule struct {
	IsUse   bool      `json:"is_use" bson:"is_use"`     //是否使用
	RuleId  uint16    `json:"rule_id" bson:"rule_id"`   //规则编号
	EndTime time.Time `json:"end_time" bson:"end_time"` //规则编号
}
type ChargeStatus struct {
	Id        uint8  `json:"charge_id"`  //充电桩编号
	MapName   string `json:"map_name"`   //充电桩所属地图名
	SiteId    string `json:"site_id"`    //充电桩所属站点
	AgvID     string `json:"agv_id"`     //占用的agv
	Online    bool   `json:"online"`     //在线
	Charging  bool   `json:"charging"`   //充电中
	ErrCode   uint8  `json:"err_code"`   //错误码
	Current   uint8  `json:"current"`    //电流（A）
	IsStretch bool   `json:"is_stretch"` //是否伸出
}

func (ChargeSite) TableName() string {
	return "t_data_charge_sites"
}
